﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Tipler.Siniflar;
using Tipler.DataSetler;
using System.Web.Security;
using System.Configuration;
using IKYSWeb.Siniflar;
using Tipler.Enumlar;
using System.Text.RegularExpressions;
using IsKurallari.Yetki;

namespace IKYSWeb
{
    public partial class Login : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                if (Request.QueryString["Cikis"] == "1")
                {
                    if (Request.QueryString["Buton"] != "1")
                    {
                        BasePage.EventLogYaz("!!!!!!!!!!!!!!!!!! Login sayfası dışında programdan çıkış !!!!!!!!!!!!!!!!!!", System.Diagnostics.EventLogEntryType.Error);
                    }

                    Session.Clear();
                    Session.RemoveAll();
                    Session.Abandon();
                    //Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

                    FormsAuthentication.SignOut();

                    Response.Redirect("Default.aspx");
                }
                txtKullaniciAdi.Focus();
            }
        }

        protected void btnTamam_Click(object sender, EventArgs e)
        {
            bool bLdapKullan = ConfigurationManager.AppSettings["LdapKullan"].ToLower() == "true" ? true : false;

            char[] arrControl = new char[] { '-', '/', '\\', '*', '\'', '\"', '{', '}', '[', ']', '(', ')', '#', '+', '&' };
            if (txtKullaniciAdi.Text.IndexOfAny(arrControl) != -1)
            {
                lblError.Text = "Geçersiz karakter - / \\ * \" \' { } [ ] ( ) # + & kullandınız!!";
                return;
            }
            if (bLdapKullan)
            {
                //YetkiIsKurali oYetkiLDAPKontrol = BasePage.XProxy<YetkiLDAPKontrolIsKurali>("LDAPKontrol");
                //FonksiyonSonuc<KullaniciDataSet> oLDAPKontrol = oYetkiLDAPKontrol.LDAPKontrol(txtKullaniciAdi.Text.Trim().Replace("'", ""), txtSifre.Text.Trim().Replace("'", ""));
                //if (oLDAPKontrol.Hata != string.Empty && oLDAPKontrol.Hata != null)
                //{
                //    lblError.Text = oLDAPKontrol.Hata;
                //}
                //else
                //    YetkiAraci.GetAuthentication(oLDAPKontrol, 
                //        !Regex.IsMatch(txtKullaniciAdi.Text.Trim(),"^\\d+$")); // numerik değer değilse ldap ile giriş yaptı kabul ediyoruz
            }
            else
            {
                FonksiyonSonuc<KullaniciDataSet> oSonuc = new FonksiyonSonuc<KullaniciDataSet>();
                FonksiyonSonuc<KullaniciDataSet> oSonucTC = new FonksiyonSonuc<KullaniciDataSet>();

                YetkiIsKurali oYetki = new YetkiIsKurali();

                bool hatavar = false, tcgirisi = false;

                oSonuc = oYetki.GirisKontrol(txtKullaniciAdi.Text);
                oSonucTC = oYetki.TCGirisKontrol(txtKullaniciAdi.Text);

                if (oSonuc.HataVarMi)
                {
                    lblError.Text = oSonuc.Hata;
                    if (oSonucTC.HataVarMi)
                    {
                        lblError.Text = oSonucTC.Hata;
                        hatavar = true;
                    }
                    else lblError.Text = "";
                }
                if (oSonuc.Sonuc.Kullanici.Rows.Count != 1)
                {
                    lblError.Text = "Hatalı Kullanıcı Adı veya Şifre!";
                    if (oSonucTC.Sonuc.Kullanici.Rows.Count != 1)
                    {
                        lblError.Text = "Hatalı TC Kimlik No veya Şifre!";
                        hatavar = true;
                    }
                    else
                    {
                        tcgirisi = true;
                        lblError.Text = "";
                    }
                }
                if (hatavar) return;
                if (tcgirisi) oSonuc = oSonucTC;

                int Durum = tcgirisi ? Convert.ToInt32(((KullaniciDataSet.KullaniciRow)oSonucTC.Sonuc.Kullanici.Rows[0]).Durum) 
                                     : Convert.ToInt32(((KullaniciDataSet.KullaniciRow)oSonuc.Sonuc.Kullanici.Rows[0]).Durum);

                if (Durum == EnumKullaniciDurum.Pasif.GetHashCode())
                {
                    lblError.Text = "Hesabınız Pasif haldedir. Lütfen sistem yöneticisine başvurunuz.";
                    return;
                }
                else if (Durum == EnumKullaniciDurum.Mail_Aktivasyon_Kodu_Gönderildi.GetHashCode())
                {
                    lblError.Text = "";
                    return;
                }
                else if (Durum == EnumKullaniciDurum.Yöneticiden_Onay_Bekleniyor.GetHashCode())
                {
                    lblError.Text = "";
                    return;
                }

                if (oSonuc.Sonuc.Kullanici[0].KullaniciTurID != EnumKullaniciTur.Mühendis.GetHashCode())
                {
                    if (oSonuc.Sonuc.Kullanici[0].SonGecerlilikTarihi < DateTime.Today)
                    {
                        lblError.Text = "Programı Kullanım Süresi Dolmuştur. Sisteme Giriş Yapabilmeniz İçin Sistem Yöneticisine Başvurunuz.";
                        return;
                    }
                }
                else
                {
                    if (CachePage.KullaniciRowGetir(oSonuc.Sonuc.Kullanici[0].LisansSahibiKullaniciID).SonGecerlilikTarihi < DateTime.Today)
                    {
                        lblError.Text = "Programı Kullanım Süresi Dolmuştur. Sisteme Giriş Yapabilmeniz İçin Sistem Yöneticisine Başvurunuz.";
                        return;
                    }
                }

                byte[] bSifre = BasePage.MD5Sifreleme(txtSifre.Text);
                byte[] bKullaniciSifre = ((KullaniciDataSet.KullaniciRow)oSonuc.Sonuc.Kullanici.Rows[0]).Sifre;
                if (bSifre.Length != bKullaniciSifre.Length)
                {
                    lblError.Text = "Hatalı Kullanıcı Adı veya Şifre!";
                    return;
                }
                for (int i = 0; i < bSifre.Length; i++)
                    if (bSifre[i] != bKullaniciSifre[i])
                    {
                        lblError.Text = "Hatalı Kullanıcı Adı veya Şifre!";
                        return;
                    }
                YetkiAraci.GetAuthentication(oSonuc, false);
            }
        }
    }
}